From: Andrew Cooper Date: Wed, 18 Jun 2014 12:57:58 +0000 (+0100) Subject: tools/libxc: rename pfn_to_mfn to xc_pfn_to_mfn X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~4828 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=eba7e67bc43894333fcdb492b86e0fbf688f7e72;p=xen.git tools/libxc: rename pfn_to_mfn to xc_pfn_to_mfn Also refactor the contents of xc_pfn_to_mfn(). It is functionally identical, but contains less lisp, fewer magic numbers, and more description of why 32bit guests are treated differently. Note that this does not affect pfn_to_mfn() in xc_domain_save.c That was already a macro which aliased pfn_to_mfn() in xg_private.h but without actually using it. Signed-off-by: Andrew Cooper CC: Ian Campbell CC: Ian Jackson Acked-by: Ian Campbell --- diff --git a/tools/libxc/xc_domain.c b/tools/libxc/xc_domain.c index 26edbaf098..ef470a5ba1 100644 --- a/tools/libxc/xc_domain.c +++ b/tools/libxc/xc_domain.c @@ -1879,8 +1879,8 @@ int xc_map_domain_meminfo(xc_interface *xch, int domid, goto failed; } for ( i = 0; i < minfo->p2m_size; i++ ) - minfo->pfn_type[i] = pfn_to_mfn(i, minfo->p2m_table, - minfo->guest_width); + minfo->pfn_type[i] = xc_pfn_to_mfn(i, minfo->p2m_table, + minfo->guest_width); /* Retrieve PFN types in batches */ for ( i = 0; i < minfo->p2m_size ; i+=1024 ) diff --git a/tools/libxc/xc_offline_page.c b/tools/libxc/xc_offline_page.c index 0b4cdf99cf..31472030f5 100644 --- a/tools/libxc/xc_offline_page.c +++ b/tools/libxc/xc_offline_page.c @@ -272,8 +272,8 @@ static int change_pte(xc_interface *xch, int domid, for (i = 0; i < minfo->p2m_size; i++) { - xen_pfn_t table_mfn = pfn_to_mfn(i, minfo->p2m_table, - minfo->guest_width); + xen_pfn_t table_mfn = xc_pfn_to_mfn(i, minfo->p2m_table, + minfo->guest_width); uint64_t pte, new_pte; int j; diff --git a/tools/libxc/xg_private.h b/tools/libxc/xg_private.h index f5755fdce2..e5933640b8 100644 --- a/tools/libxc/xg_private.h +++ b/tools/libxc/xg_private.h @@ -132,13 +132,19 @@ struct domain_info_context { unsigned long p2m_size; }; -static inline xen_pfn_t pfn_to_mfn(xen_pfn_t pfn, xen_pfn_t *p2m, int gwidth) +static inline xen_pfn_t xc_pfn_to_mfn(xen_pfn_t pfn, xen_pfn_t *p2m, + unsigned gwidth) { - return ((xen_pfn_t) ((gwidth==8)? - (((uint64_t *)p2m)[(pfn)]): - ((((uint32_t *)p2m)[(pfn)]) == 0xffffffffU ? - (-1UL) : - (((uint32_t *)p2m)[(pfn)])))); + if ( gwidth == sizeof(uint64_t) ) + /* 64 bit guest. Need to truncate their pfns for 32 bit toolstacks. */ + return ((uint64_t *)p2m)[pfn]; + else + { + /* 32 bit guest. Need to expand INVALID_MFN for 64 bit toolstacks. */ + uint32_t mfn = ((uint32_t *)p2m)[pfn]; + + return mfn == ~0U ? INVALID_MFN : mfn; + } } /* Number of xen_pfn_t in a page */